// 使用goroutine和channel实现一个计算int64随机数各位数和的程序。
// 开启一个goroutine循环生成int64类型的随机数，发送到jobChan
// 开启24个goroutine从jobChan中取出随机数计算各位数的和，将结果发送到resultChan
// 主goroutine从resultChan取出结果并打印到终端输出

package main

import (
	"fmt"
	"math/rand"
	"sync"
	"time"
)

var wg sync.WaitGroup

func generateNumber(ch1 chan int64) {
	defer wg.Done()
	for {
		rand.Seed(time.Now().UnixNano())
		x := rand.Int63()
		time.Sleep(time.Second)
		ch1 <- x
	}
}

func addNum(ch1 chan int64, ch2 chan int64) {
	defer wg.Done()
	for {
		x := <-ch1
		res := int64(0)
		fmt.Printf("int64数据:%v ", x)
		for x > 0 {
			res += x % 10
			x = x / 10
		}
		ch2 <- res
	}

}

func main() {
	a := make(chan int64, 10000)
	b := make(chan int64, 10000)
	wg.Add(1)
	go generateNumber(a)
	wg.Add(24)
	for i := 0; i < 24; i++ {
		go addNum(a, b)
	}

	for value := range b {
		fmt.Printf("相加的结果为%v\n", value)
	}
	wg.Wait()
}
